"""
提示词工程工作流状态定义
支持人工介入反馈的提示词工作流状态管理
"""

from typing import Dict, List, Any, Optional, Union
from typing_extensions import TypedDict

class PromptEngineeringState(TypedDict):
    """
    提示词工程工作流状态定义，支持人工介入反馈
    """
    # 用户输入
    requirement: str
    
    # 分析结果
    requirement_analysis: str
    
    # 当前提示词
    current_prompt: Optional[str]
    
    # 人工反馈信息
    human_feedback: Optional[str]
    
    # 反馈历史
    feedback_history: List[Dict[str, Any]]
    
    # 优化目标
    optimization_goal: Optional[str]
    
    # 提示词评估
    prompt_evaluation: Optional[str]
    
    # 最终输出的提示词
    final_prompt: Optional[str]
    
    # 设计说明
    design_reasoning: Optional[str]
    
    # 迭代次数
    iteration_count: int
    
    # 工作流完成标志
    workflow_complete: bool
    
    # 人工介入标志
    human_intervened: bool
    
    # 当前阶段
    current_stage: str  # "analysis", "design", "evaluation", "optimization", "final"
    
    # 质量评分
    quality_score: float
    
    # 各阶段执行时间记录
    execution_time: Dict[str, float]
    
    # 上下文信息
    context_info: Dict[str, Any]
    
    # 元数据信息
    metadata: Dict[str, Any]
    
    # A/B测试结果
    ab_test_results: Optional[Dict[str, Any]]
    
    # 性能指标历史
    performance_metrics: List[Dict[str, Any]]
    
    # 用户反馈历史
    user_feedbacks: List[Dict[str, Any]]
    
    # 优化历史记录
    optimization_history: List[Dict[str, Any]]
    
    # 多版本提示词存储
    prompt_versions: Dict[str, str]
    
    # 测试环境结果
    test_results: Optional[Dict[str, Any]]
    
    # 用户偏好信息
    user_preferences: Dict[str, Any]
    
    # 领域上下文信息
    domain_context: Optional[str]
    
    # 历史交互记录
    interaction_history: List[Dict[str, Any]]
    
    # 个性化设置
    personalization_settings: Dict[str, Any]
    
    # 模板推荐结果
    template_recommendations: List[str]
    
    # 评估详细信息
    quality_evaluation_details: Optional[Dict[str, Any]]
    
    # A/B测试变体
    ab_test_variants: List[str]
    
    # 质量评分历史
    quality_history: List[Union[float, Dict[str, Any]]]
    
    # 决策日志
    decision_log: List[Dict[str, Any]]
    
    # 工作流指标
    workflow_metrics: Dict[str, Any]